﻿<?xml version="1.0" encoding="utf-8"?>
<website name="andrew myhre" hostname="andrew.myhre.tanash.net,localhost" systemName="andrewmyhre" isOnline="0" isBlogSite="1" url="andrew.myhre.tanash.net" publishDate="Sun, 16 Nov 2008 11:43:34" lastBuildDate="Sun, 16 Nov 2008 11:43:34">
  <webpage id="76" key="AboutMe" guid="1c457fa7-de2b-40d1-a1f2-6fa552a235f7" title="About Me" dateCreated="Tue, 30 Oct 2007 01:26:26" createdYear="2007" createdMonth="10" createdDay="30" createdHour="1" createdMinute="26" secure="0" pageType="Standard" masterPage="page" homepage="0" blogpost="0" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>to come...</p>]]></webpage>
  <webpage id="64" key="HomePage" guid="75caa9b9-eadb-40b5-8e98-fe0700ab6ffe" title="Home Page" dateCreated="Sun, 28 Oct 2007 08:12:08" createdYear="2007" createdMonth="10" createdDay="28" createdHour="8" createdMinute="12" secure="0" pageType="Standard" masterPage="default" homepage="0" blogpost="0" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>&nbsp;</p>]]></webpage>
  <webpage id="65" key="portfolio" guid="53518218-2249-48d0-88a6-1977b5a785e9" title="portfolio" dateCreated="Sun, 28 Oct 2007 08:12:08" createdYear="2007" createdMonth="10" createdDay="28" createdHour="8" createdMinute="12" secure="0" pageType="Standard" masterPage="default" homepage="0" blogpost="0" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<script type="text/javascript">
var currentSectionId=null;
function toggle(sectionid)
{
if (currentSectionId)
document.getElementById(currentSectionId).style.display='none';

if (document.getElementById(sectionid).style.display == 'block')
{
document.getElementById(sectionid).style.display = 'none';
} else 
{
document.getElementById(sectionid).style.display = 'block';
}

currentSectionId=sectionid;
}
</script>
<p><style type="text/css">
.exp
{
border:2px solid #ccc;
padding:6px;
display:none;
}
.exp h3
{
color:#aaa;
}
</style></p>
<h1 id="heading">Andrew Myhre - ASP.Net AJAX XML</h1>
<div id="menu">
<ul>
    <li>Skills
    <ul>
        <li><a href="javascript:void(0);">C# ASP.Net</a></li>
        <li><a href="javascript:void(0);">MS SQL</a></li>
        <li><a href="javascript:void(0);">Business Process</a></li>
        <li><a href="javascript:void(0);">Web Services</a></li>
        <li><a href="javascript:void(0);">Mobile Apps</a></li>
        <li><a href="javascript:void(0);">AJAX</a></li>
        <li><a href="javascript:void(0);">XML, XSLT</a></li>
        <li><a href="javascript:void(0);">JavaScript</a></li>
        <li><a href="javascript:void(0);">HTML</a></li>
    </ul>
    </li>
    <li>Experience
    <div id="totalExperience">&nbsp;</div>
    <ul>
        <li><a href="javascript:void(0);" onclick="toggle('expTequila');">TEQUILA\ London</a>
        <div id="expTequila" class="exp">
        <h3>June 2007 - Current</h3>
        <p>Development of applications utilising internet and database technologies and cleverly designed advertising to increase revenue of other companies</p>
        </div>
        </li>
        <li><a href="javascript:void(0);" onclick="toggle('expChunk');">Chunk Ideas Ltd</a>
        <div id="expChunk" class="exp">
        <h3>May 2007  &mdash; June 2007 (Contract)</h3>
        <p>I helped Chunk Ideas develop the Foster's Laidback Legends website. The promotion has seen more than 25,000 registrations and huge amounts of Foster's Twist given away. http://fosters.co.uk/laidbacklegends</p>
        </div>
        </li>
        <li><a href="javascript:void(0);" onclick="toggle('expConscia');">Conscia Ltd 2006-2007</a>
        <div id="expConscia" class="exp">
        <h3>September 2006  &mdash; April 2007</h3>
        <p>Lead developer of a small team developing an enterprise multi-platform web application for Cardinal Security Ltd for several large national retail chains. Employed cutting-edge technologies including: - C# ASP.Net 2.0 - SQL 2005 - NHibernate, object data persistance technology - ASP.Net AJAX 1.0 - Windows Mobile 5.0 and Windows CE (PDA) development - Windows Application Development (C# ASP.Net 2.0) - Remote Windows Application deployment - Web Services architecture - Mobile data feeds to/from PDA devices to a central web server - Agile Development methods Responsibilites: - Architecture of N-Tier web application - Implementation of N-Tier web application including Business Logic Layer, Data Persistance Layer, Web Services - Design and implementation of Windows Mobile 5.0 application, including Web Services consumption, XML-SOAP serialization, binary serialization</p>
        </div>
        </li>
        <li><a href="javascript:void(0);" onclick="toggle('expGeddes');">Anne Geddes Ltd 2005-2006</a>
        <div id="expGeddes" class="exp">
        <h3>July 2005  &mdash; May 2006</h3>
        <p>For Anne Geddes I was initially contracted to redevelop the existing Anne Geddes Baby e-commerce website into the envisioned Freemail.com website. Although the timeframe was extremely tight and workload heavy, the project was completed successfully and on time. After the initial launch I was retained in a semi-permanent role to assist with maintainance and extension of the www.Freemail.com website, as well that of the parent www.AnneGeddes.com, which at the same time was being re-developed in ASP.Net C# with my assistance. A further brand campaign commenced in 2006 where an entirely new website, www.Fast2umail.com, was commissioned to be launched within 2 months. After the success of this second website I departed Anne Geddes to travel South America and pursue the second chapter of my career in the UK.</p>
        </div>
        </li>
        <li><a href="javascript:void(0);" onclick="toggle('expSOS');">Switched-On Solutions 2005</a>
        <div id="expSOS" class="exp">
        <h3>February 2005  &mdash; April 2005</h3>
        <p>I was hired by Switched-On Solutions as a contracter to provide consulting and development expertise in supplying local businesses with new-generation technology solutions, primarily Sharepoint Team Services and .Net remoting. Among the clients I assisted were Auckland Savings Bank and Switched-On Solutions itself, by redeveloping internal business logic processes using Sharepoint Team Services along with C#, SOAP and ASP.Net Remoting.</p>
        </div>
        </li>
        <li><a href="javascript:void(0);" onclick="toggle('expJAW');">Jennifer Ann Web 2004-2005</a>
        <div id="expJAW" class="exp">
        <h3>December 2003  &mdash; December 2004</h3>
        <p>Jennifer Ann Web provided me with experience in a company with a marketing focus. I was employed to develop new marketing websites from a brief, and maintain existing websites. For many of the accounts I performed the role of account manager, as was the case with Total Experience, a franchise in the tradition of Red Letter Days. Jennifer Ann Web unexpectedly discontinued trading in January of 2005, at which point I decided to begin my freelance career.</p>
        </div>
        </li>
        <li><a href="javascript:void(0);" onclick="toggle('expReal');">Real Developments 1999-2004</a>
        <div id="expReal" class="exp">
        <h3>December 1999  &mdash; December 2003</h3>
        <p>Offered a permanent package by Real Developments in 1999, where I was using Cold Fusion and Access, and later ASP and MS SQL 7. The small-company structure (RD was 3 years old) allowed me to learn a variety of skills very quickly, as I applied myself to email &amp; domain administration, SQL database design, optimisation, index construction, as well as an introduction to OLAP. In 2002 Real Developments was acquired by Lion Nathan/Lion Breweries and re-branded to 'Real'. This led to a wealth of new opportunities from one of New Zealand's strongest commercial companies.</p>
        </div>
        </li>
    </ul>
    </li>
</ul>
</div>
<div id="body">&nbsp;</div>]]></webpage>
  <blogpost id="97" key="Moved" guid="366cc2e5-58f0-465f-ba77-84659b8fa667" title="Moved!" dateCreated="Mon, 04 Feb 2008 12:06:41" createdYear="2008" createdMonth="2" createdDay="4" createdHour="0" createdMinute="6" secure="0" pageType="Standard" masterPage="post" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>This blog will now be found at <a href="http://andrewmyhre.wordpress.com">http://andrewmyhre.wordpress.com</a></p>]]></blogpost>
  <blogpost id="96" key="StackManagementDuh" guid="b89b0fa8-5c0a-4744-9606-e50e16f8b13d" title="Stack Management - Duh" dateCreated="Sun, 03 Feb 2008 08:27:34" createdYear="2008" createdMonth="2" createdDay="3" createdHour="8" createdMinute="27" secure="0" pageType="Standard" masterPage="post" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>So while reading up on some C++ code samples I saw an implementation for a stack manager, and saw something so simple and obvious I can't believe I've never thought of doing it this way.</p>
<p>In this case the sample was for a Profiling system, but essentially we're talking about a managed stack where items can be added more than once. Doing so increments a value on the item. When removing an item from the stack we decrement the number of instances of each item and finally remove it entirely if the count == 0.</p>
<p>Here's how I would have implemented it (I've rewritten in C# for readability):</p>
<p><!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red0\green128\blue0;}??\fs18 \cf1 using\cf0  System;\par ??\par ??\cf1 public\cf0  \cf1 class\cf0  MyObj\par ??\{\par ??    \cf1 public\cf0  \cf1 string\cf0  name;\par ??    \cf1 public\cf0  \cf1 int\cf0  count;\par ??    \cf1 public\cf0  \cf1 bool\cf0  isAlive;\par ??    \cf1 public\cf0  MyObj(\cf1 string\cf0  _name)\par ??    \{\par ??        \cf1 this\cf0 .name = _name;\par ??        isAlive = \cf1 true\cf0 ;\par ??        count = 1;\par ??    \}\par ??\par ??\}\par ??\cf1 public\cf0  \cf1 class\cf0  MyObjectManager\par ??\{\par ??    \cf1 private\cf0  MyObj[] _objects = \cf1 new\cf0  MyObj[1000]();\par ??    \par ??    \cf1 public\cf0  MyObj Add(\cf1 string\cf0  name)\par ??    \{\par ??        \cf4 // look for a matching object\par ??\cf0         \cf1 foreach\cf0  (MyObj _o \cf1 in\cf0  _objects)\par ??        \{\par ??            \cf1 if\cf0  (_o.name.Equals(name))\par ??            \{\par ??                ++_o.count;\par ??                \cf1 return\cf0  _o;\par ??            \}\par ??        \}\par ??\par ??        \cf4 // couldn't find one. look for an unused place in the stack to add a new one\par ??\cf0         \cf1 foreach\cf0  (MyObj _o \cf1 in\cf0  _objects)\par ??        \{\par ??            \cf1 if\cf0  (!_o.isAlive)\par ??            \{\par ??                _o = \cf1 new\cf0  MyObj(name);\par ??                \cf1 return\cf0  _o;\par ??            \}\par ??        \}\par ??    \}\par ??\par ??    \cf4 // remove a matching object from the stack\par ??\cf0     \cf1 public\cf0  \cf1 void\cf0  Remove(\cf1 string\cf0  name)\par ??    \{\par ??        \cf1 foreach\cf0  (MyObj _o \cf1 in\cf0  _objects)\par ??        \{\par ??            \cf1 if\cf0  (_o.name.Equals(name))\par ??            \{\par ??                \cf1 if\cf0  (--_o.count == 0)\par ??                    _o.isAlive = \cf1 false\cf0 ;\par ??            \}\par ??        \}\par ??    \}\par ??\}\par ??\par ??}
--></p>
<div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 9pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;1</span>&nbsp;<span style="color: blue;">using</span> System;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;2</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;3</span>&nbsp;<span style="color: blue;">public</span> <span style="color: blue;">class</span> MyObj</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;4</span>&nbsp;{</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">string</span> name;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">int</span> count;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">bool</span> isAlive;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> MyObj(<span style="color: blue;">string</span> _name)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;10</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">this</span>.name = _name;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;11</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; isAlive = <span style="color: blue;">true</span>;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;12</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; count = 1;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;14</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;15</span>&nbsp;}</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;16</span>&nbsp;<span style="color: blue;">public</span> <span style="color: blue;">class</span> MyObjectManager</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;17</span>&nbsp;{</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> MyObj[] _objects = <span style="color: blue;">new</span> MyObj[1000]();</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;19</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> MyObj Add(<span style="color: blue;">string</span> name)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// look for a matching object</span></p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (MyObj _o <span style="color: blue;">in</span> _objects)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (_o.name.Equals(name))</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ++_o.count;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> _o;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;31</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// couldn't find one. look for an unused place in the stack to add a new one</span></p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (MyObj _o <span style="color: blue;">in</span> _objects)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (!_o.isAlive)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _o = <span style="color: blue;">new</span> MyObj(name);</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> _o;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;42</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green;">// remove a matching object from the stack</span></p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">void</span> Remove(<span style="color: blue;">string</span> name)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (MyObj _o <span style="color: blue;">in</span> _objects)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (_o.name.Equals(name))</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (--_o.count == 0)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _o.isAlive = <span style="color: blue;">false</span>;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;55</span>&nbsp;}</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;56</span>&nbsp;</p>
</div>
<p>Note that there are two loops in the add method? Here's how I saw it done:</p>
<p><!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red0\green128\blue0;}??\fs18 \cf1 using\cf0  System;\par ??\par ??\cf1 public\cf0  \cf1 class\cf0  MyObj\par ??\{\par ??    \cf1 public\cf0  \cf1 string\cf0  name;\par ??    \cf1 public\cf0  \cf1 int\cf0  count;\par ??    \cf1 public\cf0  \cf1 bool\cf0  isAlive;\par ??    \cf1 public\cf0  MyObj(\cf1 string\cf0  _name)\par ??    \{\par ??        \cf1 this\cf0 .name = _name;\par ??        isAlive = \cf1 true\cf0 ;\par ??        count = 1;\par ??    \}\par ??\par ??\}\par ??\cf1 public\cf0  \cf1 class\cf0  MyObjectManager\par ??\{\par ??    \cf1 private\cf0  MyObj[] _objects = \cf1 new\cf0  MyObj[1000]();\par ??    \par ??    \cf1 public\cf0  MyObj Add(\cf1 string\cf0  name)\par ??    \{\par ??        \cf4 // look for a matching object\par ??\cf0         \cf1 int\cf0  stackIndex = -1;\par ??        \cf1 int\cf0  loopIndex=0;\par ??        \cf1 foreach\cf0  (MyObj _o \cf1 in\cf0  _objects)\par ??        \{\par ??            \cf1 if\cf0  (!_o.isValid)\par ??            \{\par ??                \cf1 if\cf0  (stackIndex < 0)\par ??                    stackIndex == loopIndex;\par ??            \}\par ??            \cf1 else\cf0  \cf1 if\cf0  (_o.name.Equals(name))\par ??            \{\par ??                ++_o.count;\par ??                \cf1 return\cf0  _o;\par ??            \}\par ??            loopIndex++;\par ??        \}\par ??\par ??        stackIndex = _o = \cf1 new\cf0  MyObj(name); ;\par ??        \cf1 return\cf0  _o;\par ??    \}\par ??\par ??    \cf4 // remove a matching object from the stack\par ??\cf0     \cf1 public\cf0  \cf1 void\cf0  Remove(\cf1 string\cf0  name)\par ??    \{\par ??        \cf1 foreach\cf0  (MyObj _o \cf1 in\cf0  _objects)\par ??        \{\par ??            \cf1 if\cf0  (_o.name.Equals(name))\par ??            \{\par ??                \cf1 if\cf0  (--_o.count == 0)\par ??                    _o.isAlive = \cf1 false\cf0 ;\par ??            \}\par ??        \}\par ??    \}\par ??\}\par ??\par ??}
--></p>
<div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 9pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;1</span>&nbsp;<span style="color: blue;">using</span> System;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;2</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;3</span>&nbsp;<span style="color: blue;">public</span> <span style="color: blue;">class</span> MyObj</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;4</span>&nbsp;{</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">string</span> name;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">int</span> count;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">bool</span> isAlive;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> MyObj(<span style="color: blue;">string</span> _name)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;10</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">this</span>.name = _name;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;11</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; isAlive = <span style="color: blue;">true</span>;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;12</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; count = 1;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;14</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;15</span>&nbsp;}</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;16</span>&nbsp;<span style="color: blue;">public</span> <span style="color: blue;">class</span> MyObjectManager</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;17</span>&nbsp;{</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> MyObj[] _objects = <span style="color: blue;">new</span> MyObj[1000]();</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;19</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> MyObj Add(<span style="color: blue;">string</span> name)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// look for a matching object</span></p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">int</span> stackIndex = -1;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">int</span> loopIndex=0;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (MyObj _o <span style="color: blue;">in</span> _objects)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (!_o.isValid)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (stackIndex < 0)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; stackIndex == loopIndex;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">else</span> <span style="color: blue;">if</span> (_o.name.Equals(name))</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ++_o.count;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> _o;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; loopIndex++;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;39</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; stackIndex = _o = <span style="color: blue;">new</span> MyObj(name); ;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> _o;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;43</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green;">// remove a matching object from the stack</span></p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">void</span> Remove(<span style="color: blue;">string</span> name)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">foreach</span> (MyObj _o <span style="color: blue;">in</span> _objects)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (_o.name.Equals(name))</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (--_o.count == 0)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _o.isAlive = <span style="color: blue;">false</span>;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;56</span>&nbsp;}</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;57</span>&nbsp;</p>
</div>
<p>Just the one loop there. Things like this make me wish I'd finished my Comp Sci degree :(</p>]]></blogpost>
  <blogpost id="95" key="AltNetUKDump" guid="47fd248b-a7ee-40d7-bf09-3a73778511cc" title="AltNetUK Dump" dateCreated="Sun, 03 Feb 2008 07:02:35" createdYear="2008" createdMonth="2" createdDay="3" createdHour="7" createdMinute="2" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Right, these are the notes I took during the Alt .Net UK conference yesterday. This is literally just me trying to type what I'm hearing, it's not coherent and probably won't help anyone. I plan to break out and expand on this information in sections over the next couple of weeks.</p>
<p>There are loads of places where I've heard a term for the first time and don't know how to spell it or what it's about. There are double question marks in those cases. Where I've done that I'd appreciate if someone can send me a note explaining what the hell it's about.</p>
<p>Enjoy!</p>
<p>&nbsp;</p>
<h2>Alt .Net UK</h2>
<h3>Session 1 &ndash; Web Services, REST, SOAP</h3>
<h3>Sebastian &amp; Alan Dean</h3>
<p><strong>REST &ndash; Architectural Style</strong><br />
Idea began with MILL architecture with constraints applied to result in REST<br />
<br />
Must be:<br />
Client-server<br />
Stateless (no app-state)<br />
Cache-constraint &ndash; messages must be cacheable across the network<br />
Uniform interface<br />
Must be layered &ndash; each client/server don&rsquo;t need to know about other clients/servers<br />
Code-on-demand &ndash; a client can request code to execute on demand e.g: pulling JS into browser<br />
<br />
Emphasis on uniform interface between component. Comprises 4 aspects:<br />
-&nbsp;&nbsp;&nbsp; URI<br />
-&nbsp;&nbsp;&nbsp; Set of well defined operations GST POST<br />
-&nbsp;&nbsp;&nbsp; Set of media types text/html, image/jpeg<br />
-&nbsp;&nbsp;&nbsp; Hypertext is the engine of app state &ndash; transition to a different URI to change the app state<br />
<br />
WACA?? Apparently a new version of HTTP which is completely RESTFul.<br />
Not sure how to spell or whether it&rsquo;s a mnemonic<br />
<br />
Concept of &lsquo;Content Negotiation&rsquo; &ndash; client asks server for a media type e.g: text/html<br />
You request against a resource e.g: /foo<br />
HTTP provides a status code and a response.<br />
<br />
To do REST properly it&rsquo;s crucial to learn how HTTP works on the wire.<br />
REST seems to be about getting the most out of HTTP, SOAP blatantly is not.<br />
How cool would a REST web reference plugin for Visual Studio be?<br />
<br />
Perhaps it&rsquo;s not about REST vs SOAP. Maybe more about REST *OR* SOAP.<br />
Maybe SOAP is the logical extension of super feature-packed, bloated HTTP.<br />
<br />
A lot of so-called &lsquo;RESTFul&rsquo; site frameworks are derogatively called &lsquo;GETFul&rsquo;, not true REST e.g: Flickr.<br />
<br />
REST should be &lsquo;SAFE&rsquo;. You should be able to get the same resource repeatedly. A GET post should not result in a state change. PUT is intended to change state &ndash; &lsquo;put&rsquo; data on the server e.g: edit details for a product.<br />
POST is an unrestrained verb, you essentially send SOME data to the server without any knowledge or expectaition of what it&rsquo;s going to do, and server provides a response i.e: what it did.<br />
With PUT you are specifying what you want to happen.<br />
<br />
Usage *should* be something like:<br />
PUT /customers/andrew.myhre<br />
Server either says OK that&rsquo;s fine or no you can&rsquo;t (exists or something)<br />
<br />
<br />
e.g: a wiki:<br />
/Hello &lt;- a page with data<br />
<br />
PUT /hello<br />
Content-Type: text/plain<br />
&hellip;. Data to PUT &hellip;.<br />
<br />
The server then updates the resource /hello with the data.<br />
<br />
The concept becomes unclear when you need to delete. PUT and POST verbs don&rsquo;t make sense when deleting. Appending verbs using semi-colons is one approach though:<br />
/customer/andrew.myhre;delete<br />
<br />
What&rsquo;s missing is a way for REST services to describe themselves.<br />
HTTP Verbs can be standardised whereas object data structures need to be declared per service for other apps to work with them.<br />
<br />
One approach is to only allow POST/PUT to a single page in your application which basically &lsquo;does&rsquo; &lsquo;something&rsquo; with &lsquo;data&rsquo; - &gt; it&rsquo;s basically a factory method which calls resources and does actions on them.<br />
<br />
WADDLE / WADL??<br />
<br />
Resources should be self-describing. Apparently this should be done through the &lt;FORM&gt; tag.<br />
<br />
Major benefit of SOAP is that it&rsquo;s protocol agnostic: you could and mail a SOAP request.<br />
<br />
When creating a wizard-style interface with REST, you would add data from each step to a form package which would only be POSTed to the server after the final step. How is validation performed at each step?<br />
<br />
Given the current state of toolsets it&rsquo;s usually a choice of either/or when considering REST and SOAP.<br />
<br />
REST is really targeted with the WWW, not so much with intranets/enterprise apps. Web Services are the other way around, focussed on enterprise apps. The two approaches have completely different goals.<br />
<br />
Comment that you shouldn&rsquo;t expect the tool to solve your problem, your approach should solve the problem. Yeah kinda.<br />
<br />
How did steven get on with his REST wrapper for SOAP services?<br />
<br />
Atom Media types &hellip; ?<br />
<br />
How would service discovery be implemented with REST?<br />
<br />
Suggestions that it would be implemented as a media type. <br />
I have to disagree, to me&nbsp; media types are &lsquo;views&rsquo; on a resource. Providing a particular view that describes how to interact WITH the resource is not the same as a view ON the resource.<br />
I think a new HTTP verb is required.<br />
<br />
Speakers propose that any application that supports add-ins and can access HTTP can be REST client. REST services can be self-describing by including content in a response e.g: a JavaScript file included in a page or an HTML form. <br />
<br />
Check out LiveWriter.<br />
It uses atom/xml to communicate with any supported blog.<br />
The reason it can do this is because the contract is not specified by the blog site but by the media type.<br />
The blog doesn&rsquo;t need to describe anything about itself for LiveWriter to know how to communicate with it.<br />
<br />
&lsquo;Squid&rsquo; ? Linux (there is a windows distro) is a reverse proxy. Also &lsquo;Varnish&rsquo;.<br />
Increases website performance by orders of magnitude, providing your HTTP is implemented correctly.<br />
</p>
<h3>Session 2 &ndash; Castle, Monorail vs MVC, Future of WebForms</h3>
<p>WebForms are generally tightly coupled. You have to expend a lot of effort and have discipline to create a loosely coupled WebForms app.<br />
<br />
You can add MonoRail to an existing site without upsetting existing WebForms. You just map a new page file extension to the MonoRail Page Controller.<br />
<br />
Because of the controller implementation in MVC you can migrate individual pages over to MVC. MasterPages can be reused providing you have implemented solely to deal with common HTML, layout and style.<br />
<br />
There are two patterns of using MVC &ndash; active and passive.<br />
Active allows for communication from server to client to inform of changes in state, which can&rsquo;t be implemented with over HTTP. This applies to win forms and allows for scenarios like asynchronous processing.<br />
<br />
http://del.icio.us/alan.dean/mvc<br />
<br />
Must check out MonoRail and Spring.Net<br />
Tesco have taken the approach of building a sophisticated front-end with a rubbish WebForms admin. &lsquo;Tis a cost-effective decision.<br />
<br />
SharePoint development seems to be very difficult.<br />
Heard a few horror stories where Sharepoint portal development has been a major loss, including one where a team of Microsoft developers were creating a site with MOSS 2007 which they found extremely difficult to complete.<br />
<br />
Check out MediaWiki<br />
&lsquo;CUYAHOGA&rsquo; portal framework &ndash; uses NHibernate.<br />
Castle ActiveRecord.<br />
&nbsp;<br />
Session 3 &ndash; LINQ, ORM, NHibernate<br />
<br />
Limitations in LINQ:<br />
-&nbsp;&nbsp;&nbsp; linq is more limited than nhibernate in terms of relationship mapping<br />
-&nbsp;&nbsp;&nbsp; not clear yet whether there will be Linq implementations for other database<br />
<br />
Linq SELECT expressions need to parse the code tree when they execute? Apparently this is slow and clunky.<br />
<br />
Someone is writing a Linq to NHibernate provider.<br />
<br />
NHibernate approach is to write the domain first and then the persistence.<br />
<br />
The Entity Framework does not support &lsquo;persistence ignorance&rsquo;.<br />
<br />
Check out Astoria<br />
<br />
NHibernate doesn&rsquo;t have the support or development team behind it that LINQ does.<br />
<br />
Check out SPOIL.<br />
NHibernate HQL JOIN FETCH clause is very important for optimising join lookups.<br />
<br />
Is it possible to implement your entities as structs, map with NHibernate and move all business logic into a different namespace (eg: Tasks).<br />
<br />
Interceptors can be used in NHibernate for auditing and could be used to keep basic fields like DateModified up to date on all domain objects without needing to be implemented per object.<br />
<br />
Look up &lsquo;Object Databases&rsquo;<br />
<br />
E-Book &lsquo;NHibernate In Action&rsquo;<br />
&nbsp;</p>
<h3>Session 4 &ndash; Automation</h3>
<h3>Scott Cowan</h3>
<p>Build Automation<br />
<br />
Nant tasks allow you to write C# code to perform build tasks.<br />
<br />
RAKE allows you to write build scripts in Ruby.<br />
<br />
BeyondCompare &ndash; merge tool, apparently very good.<br />
<br />
TFSBuildLab &ndash; a CruiseControl.net like plug-in for Visual Studio<br />
<br />
TeamCity is free for up to 5 users.<br />
<br />
There&rsquo;s a SCRUM template called E-SCRUM (might actually be Scrum for Team System)<br />
<br />
Custom Visual Studio project templates might be a good way to decrease startup time for new projects. There are probably project templates out there which would be useful.<br />
<br />
CIFactory is a tool to create Continuous Integration environments.<br />
<br />
TFS Build Center<br />
Brian Harry/Harris &ndash; MVP let library of build tools for TFS.<br />
Ron Howard<br />
<br />
Practical Project Automation &ndash; book about Java tools for automation.<br />
<br />
Check out Final Builder</p>]]></blogpost>
  <blogpost id="94" key="AltNetUKWarmdown" guid="7410c9d2-02de-4813-9dbc-4db2c8084b93" title="Alt.Net UK Warmdown" dateCreated="Sat, 02 Feb 2008 10:44:13" createdYear="2008" createdMonth="2" createdDay="2" createdHour="10" createdMinute="44" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Just arrived back from the Alt.Net UK conference. Unfortunately I couldn't join everyone else for drinks (god knows I wanted a few by the end), but I got loads out of the day itself.</p>
<p>Thanks to everyone who came and made it an inspiring day, thanks to the organisers, Alan and Roy, Michelle and her team for keeping everything running smoothly and making us feel welcome, and of course Conchango for providing the venue and taking interest in the event! The discussions were all well informed and earnest, and I came away feeling like I've got a lot to learn but equally that I'm on the right track. Basically it's good to know that there are <em>others</em> out there. Also had a few cool conversations and even may have managed to help someone out with their project (I hope!).</p>
<p>I've got a Word document will all my notes so I'll put together a proper post with all the gore, but right now Real Life intervenes (prior commitments, hence I couldn't join the others at the pub) so it'll have to wait until tomorrow.</p>
<p>So a big THANK YOU to everyone involved. Looking forward to the next one.</p>
<p>P.S: I think I might be going to Mix 08 in Las Vegas. Fingers crossed.</p>
<p>&nbsp;</p>]]></blogpost>
  <blogpost id="93" key="ClassTemplatesGenericClassesinC" guid="fbfc72ae-2ecd-44a8-8f93-7f8bccd365bf" title="Class Templates - Generic Classes in C++" dateCreated="Sun, 20 Jan 2008 04:05:28" createdYear="2008" createdMonth="1" createdDay="20" createdHour="4" createdMinute="5" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Since C# 2.0 we've been able to use the following syntax:</p>
<!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;}??\fs18     \cf3 public\cf0  \cf3 class\cf0  \cf4 MyClass\cf0 &lt;t&gt;\par ??    \{\par ??        \cf3 private\cf0  t obj;\par ??        \cf3 public\cf0  MyClass(t theObject)\par ??        \{\par ??            \cf3 this\cf0 .obj = theObject;\par ??        \}\par ??\par ??        \cf3 public\cf0  t doit()\par ??        \{\par ??            \cf3 return\cf0  obj;\par ??        \}\par ??    \}}
-->
<div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 9pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: rgb(43, 145, 175);">MyClass</span>&lt;t&gt;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> t obj;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> MyClass(t theObject)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">this</span>.obj = theObject;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;89</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">public</span> t doit()</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> obj;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
</div>
<p>&nbsp;This can be accomplished in C++ in the following way:</p>
<p><!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;}??\fs18 \cf1 template\cf0  &lt;\cf1 class\cf0  T&gt;\par ??\cf1 class\cf0  MyClass\par ??\{\par ??\cf1 public\cf0 :\par ??\tab MyClass(T* obj) ; \par ??\tab ~MyClass();\par ??\tab T* doit();\par ??\cf1 private\cf0 :\par ??\tab T* theObject;\par ??\} ;\par ??\par ??MyClass::MyClass(T *obj)\par ??\{\par ??\tab theObject = obj;\par ??\}\par ??\par ??T* MyClass::doit()\par ??\{\par ??\tab \cf1 return\cf0  theObject;\par ??\}}
--></p>
<div style="background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 9pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;1</span>&nbsp;<span style="color: blue;">template</span> &lt;<span style="color: blue;">class</span> T&gt;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;2</span>&nbsp;<span style="color: blue;">class</span> MyClass</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;3</span>&nbsp;{</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;4</span>&nbsp;<span style="color: blue;">public</span>:</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp; MyClass(T* obj) ;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp; ~MyClass();</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp; T* doit();</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;8</span>&nbsp;<span style="color: blue;">private</span>:</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp; T* theObject;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;10</span>&nbsp;} ;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;11</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;12</span>&nbsp;MyClass::MyClass(T *obj)</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;13</span>&nbsp;{</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;14</span>&nbsp;&nbsp;&nbsp;&nbsp; theObject = obj;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;15</span>&nbsp;}</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;16</span>&nbsp;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;17</span>&nbsp;T* MyClass::doit()</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;18</span>&nbsp;{</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;19</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> theObject;</p>
<p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">&nbsp;&nbsp;&nbsp;20</span>&nbsp;}</p>
</div>
<p>&nbsp;This is how we can implement strongly-typed object managers, as well as <a target="_blank" href="http://ootips.org/yonat/4dev/smart-pointers.html">smart pointers</a>.</p>]]></blogpost>
  <blogpost id="92" key="BuildingaGameEngineinXNA" guid="99486c8d-e87d-4b8e-9e6f-8b3163289698" title="Building a Game Engine in XNA" dateCreated="Sun, 13 Jan 2008 12:54:49" createdYear="2008" createdMonth="1" createdDay="13" createdHour="12" createdMinute="54" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>No, not me. Blogger <a target="_blank" href="http://roecode.wordpress.com/author/roecode/">roecode</a> has just started writing this series, <a target="_blank" href="http://roecode.wordpress.com/2008/01/09/xna-framework-gameengine-development-part-1/">XNA Game Engine Development</a>. <strong>I'm in awe.</strong> I've fantasized about writing a game engine ever since I knew what such a thing was, but without any exposure to <em>other</em> game developers it's pretty difficult to learn. I'm only as proficient* in ASP.Net because the community has been out there blogging their faces off about it - for instance the completely benevolent genius that is <a target="_blank" href="http://aspnet.4guysfromrolla.com">4GuysFromRolla</a>, and the excellent series of articles they produced in 2006 about the <a target="_blank" href="http://aspnet.4guysfromrolla.com/articles/120705-1.aspx">ASP.Net 2.0 Membership system</a> - a series which, by the way, helped in large part to inspire me to be a <a target="_blank" href="http://www.dashes.com/anil/images/evangelist-boy.jpg">.Net 'evangelist'</a>, and take myself seriously as a <a target="_blank" href="http://www.unex.ucsb.edu/img/unex/cert/BusinessGroup.jpg">professional</a> <a target="_blank" href="http://www.healthstylesexercise.com/catalog/images/Body-Solid-Leg-Developer-Attach.jpg">developer</a>.</p>
<p>I digress, but only to make the point that it's articles like this XNA Game Engine Development series that are going to inspire others by making it all less <em>mysterious</em>. I mean, I wouldn't have the first clue what needs to be set up when creating a DirectX session. Even in an XNA Game project - there are tutorials on the Microsoft websites, but none of the code is intended to be taken as being production-level code. What are the best practises when creating your architecture? What do you need to tell your DirectX device, and what should you ask of it? Stuff that's basically 'in-the-know'.</p>
<p>So if you have any interest in game development, check out roecode's tutorial series. It's in development and there are currently 3 parts out. This is the kind of community content that, if anything, is going to push XNA as a serious contender in game development. Now I know that as a platform for professional development, it just doesn't compare to C++ for low-level control, but man... this is really handing a lot of power to the hobbyists. And Microsoft have always taken the view that it doesn't matter if their code is bloated and inordinately resource-hungry, because they rely on what must surely be Microsoft's patron saint - <em>Moore's Law</em>. Where the fuck would Windows XP be if we'd never improved upon the 486? Anyway, they're probably hedging their bets that, pretty soon, XNA is going to perform a lot more closely to C++**, and they'll be positioned quite nicely.</p>
<p>Which is really all to say - cheers roecode, I await further updates <em>most eagerly</em>.</p>
<p>Here are parts <a target="_blank" href="http://roecode.wordpress.com/2008/01/09/xna-framework-gameengine-development-part-1/">one</a>, <a target="_blank" href="http://roecode.wordpress.com/2008/01/10/xna-framework-gameengine-development-part-2-fpscountergamecomponent/">two</a> and <a target="_blank" href="http://roecode.wordpress.com/2008/01/10/xna-framework-gameengine-development-part-3-tdd/">three</a> of the series.</p>
<p><font size="1">*Note: I'm <em>mildly</em> proficient</font></p>
<p><font size="1">**Yes, I know that C++ will always generally outstrip C#, I mean eventually the differences just won't be so significant.</font><font size="1"></font></p>]]></blogpost>
  <blogpost id="91" key="MVCnotreadyfor2008" guid="e9acac9e-3006-43f4-967e-e0a033732ad0" title="MVC not ready for 2008?" dateCreated="Wed, 09 Jan 2008 08:55:52" createdYear="2008" createdMonth="1" createdDay="9" createdHour="8" createdMinute="55" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>High expectations this year. I want to have at least a couple of commercial MVC website under my belt by 2009, and I want to be using Team Foundation 2008. Part of this will be to make use of Web Deployment Projects combined with Team Builds. What would be great is if I could have the team server spitting out nicely labelled development, staging and production builds of our sites, and if I could configure the config file changes using web deployment projects. Also I would like it to produce metrics around unit tests, integration test and interface tests, and anything else that would be useful (code metrics? haven't explored this fully yet). I want our projects managers/testers to be able to know what build they're looking at and easily get a summary of the changesets involved in that build.</p>
<p>So that's the plan. We are currently running TFS 2005, but the documentation says that VSTS 2008 and TFS 2005 are compatible, so what I'm going to do first is set up a 'Sandbox' MVC project in it's own Team Project space, for us to play with and try things out.</p>
<p>So started by creating a new Team Project, then a new ASP.Net MVC Web Application and Test project (makes sense - want to try out the built in unit testing functionality).</p>
<p>Then I choose the project in TFS I want to use as the repository.</p>
<p>At this stage everything is created and ready to check in, so I perform a solution check-in. All looks good, I can see padlocks next to all my files. But if I close and re-open the solution, I get the message:</p>
<p><em>The project 'MvcApplicationTest' is under source control. This version of Visual Studio .NET does not support source controlled projects. Any changes that you make to this project will not be propagated to source control.</em></p>
<p>Strange! And now the test project is no longer source-controlled. If I create a build to run these tests on the build server it won't have any of the project files to compile and run.</p>
<p>To clarify, I'm using Visual Studio Team System 2008 RTM. Anyway, I've tried a couple of things, like deleting the test project and adding a new test project. Trouble is I can't write tests against the MVC controllers due to some weird issue - I can't add a reference to the version of System.Web.Extensions.dll referenced by the MVC project (3.6.0.0) to the test project. It's in the GAC, but doesn't appear in the components list (I see 3.5.0.0, the version that ships with VS 2008). So I can't even create my own test projects.</p>
<p>So, I've tripped at the first hurdle. Brilliant. Roll on 2008.</p>]]></blogpost>
  <blogpost id="90" key="Repeat" guid="6f218cae-cab3-4b2f-9412-2941514348aa" title="Repeat" dateCreated="Wed, 19 Dec 2007 03:49:48" createdYear="2007" createdMonth="12" createdDay="19" createdHour="3" createdMinute="49" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>I want to repeat a good link I saw on <a target="_blank" href="http://stream.sleepoverrated.com">Scott Cowan's blog</a> this morning. <a target="_blank" href="http://www.smartagile.com/">http://www.smartagile.com/</a></p>
<p>Lots of info here. Haven't read much yet but todays post is great - the <a target="_blank" href="http://www.smartagile.com/2007/12/cone-of-sanity.html">Cone of Sanity</a> (oooOOOooo!)</p>
<p>I'm in a quandry about this blog. Should I keep using my own CMS and build a comments system, or should I switch to a 3rd party solution? It wouldn't take that long to add comments. Then again with the release of MVC it's tempting to just rebuild the whole web layer from scratch (like I did for .Net 2.0). But if I really need something to do, I could think of something more ultimately worthwhile.</p>
<p>For now if you want to contact me, <a target="_blank" href="http://twitter.com/andrew_myhre">Twitter me</a>. Why not tell me what the hell I should do with my blog?</p>]]></blogpost>
  <blogpost id="89" key="TFSContinuousIntegrationandTesting" guid="796c9a43-f98f-49bb-8fd6-6d136c7ae42d" title="TFS, Continuous Integration and Testing" dateCreated="Fri, 14 Dec 2007 08:41:01" createdYear="2007" createdMonth="12" createdDay="14" createdHour="8" createdMinute="41" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Have been looking around at different solutions for combining source control, task tracking, continuous integration and testing.</p>
<p>Of the open source tools my favourite solution is running <a href="http://studios.thoughtworks.com/mingle-project-intelligence" target="_blank">Mingle</a> on top of <a href="http://subversion.tigris.org/" target="_blank">SubVersion</a>, along with <a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET" target="_blank">CruiseControl.Net</a>, <a href="http://nant.sourceforge.net/" target="_blank">NAnt</a> and <a href="http://www.mbunit.com/" target="_blank">MBUnit</a>. Definitely a lightweight, rough and ready system. The only thing is, I haven't seen a good interface testing solution which can be incorporated into a NAnt build. And I want interface testing as part of build automation. It's just smart, and I don't want to settle for a solution which excludes it.</p>
<p>Today I read a <a href="http://blogs.msdn.com/buckh/archive/2006/08/09/more_continuous_integration.aspx" target="_blank">stern complaint about the near-impossibility of trying to make MSBuild, MSTest, NAnt, and CC.Net cooperate with each other</a>. It doesn't fill me with confidence about mixing different ecosystems together to achieve common results, especially when trying to make Microsoft products play nice with other systems. Honestly, I love NAnt - it's so extendable, lightweight, and well designed. But I need the results, and TFS offers so much in of itself that I'd drop it out of the equation in a heartbeat if I could make TFS do everything I want, not to mention if I could get a licensed version of TS to set up.</p>
<p>As it happens, <a href="http://www.tequila-uk.com" target="_blank">my company</a> seems to be open to the idea of spending STUPID amounts of money on doing it <em>well</em>, so we're actually considering a full Team System kit-out. I don't understand why they'd spend the money over the cheaper alternatives, but when I mentioned a figure of &pound;10K they seemed to think it wasn't out of the question. Grain of salt, touch wood, etc etc.</p>
<p>With that mind I found a <a href="http://www.codeplex.com/Automaton" target="_blank">wonderful continuous integration app called Automaton</a> which runs on top of Team Foundation Server. It works with Team Builds, which by extension means it incorporates all of the testing features which can be bundled with team Builds. VSTS 2005 doesn't include interface testing, but as VSTS 2005/2008 and TFS 2005/2008 are largely cross-version compatible, I've got a hunch that the current version of Automaton will allow us to manage Team Builds on our TFS 2008 setup when we do eventually upgrade to it. Which would mean we could roll unit, integration and interface testing into our continous build solution, along with the other project management features which are included in TFS!</p>
<p>And that gets me horny.</p>
<p>On another topic, I took a first dive into the ASP.Net MVC framework yesterday, and I LOVE IT. I'm tempted to rebuild my own CMS system using it.</p>]]></blogpost>
  <blogpost id="88" key="CoupleOfNeatLinks" guid="1eac6703-abf7-4f91-80c3-5f60adc54319" title="Couple Of Neat Links" dateCreated="Sun, 09 Dec 2007 11:49:58" createdYear="2007" createdMonth="12" createdDay="9" createdHour="23" createdMinute="49" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p><a href="http://www.rememberthemilk.com/" target="_blank">http://www.rememberthemilk.com/</a><br />
A neat task manager</p>
<p><a href="http://www.livevalidation.com/" target="_blank">http://www.livevalidation.com/</a><br />
A neat javascript validation library (looks like a good bet for the recently released .Net MVC framework).</p>]]></blogpost>
  <blogpost id="87" key="MobileuTorrentAndOnJava" guid="21a163df-069f-469b-80be-0ce3555520cf" title="Mobile uTorrent, And On Java" dateCreated="Sat, 08 Dec 2007 01:55:51" createdYear="2007" createdMonth="12" createdDay="8" createdHour="13" createdMinute="55" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Had the idea this evening to develop a mobile client providing torrent search via Mininova RSS and the uTorrent Web UI API. I found some details about a <a href="http://www.aut.bme.hu/portal/SymTorrent.aspx?lang=en">Symbian uTorrrent WebUI client</a>, but so far nothing <em>web</em> based. I want to try to knock something together when I get some free time over christmas.</p>
<p>Actually, apart from the one posted above, there are a couple of references to mobile uTorrent client apps:</p>
<p><a href="http://raymasky.blogspot.com/2007/07/utorrent-web-ui-goes-mobile.html">http://raymasky.blogspot.com/2007/07/utorrent-web-ui-goes-mobile.html</a><br />
<a href="http://forum.utorrent.com/viewtopic.php?id=18094">http://forum.utorrent.com/viewtopic.php?id=18094</a></p>
<p>Given the conversation in the latter link, which in part reads:</p>
<p><em>This has probably gone around here a lot but searching for keywords like &quot;mobile&quot; or &quot;symbian&quot; didn't come up with anything besides i got to know that the programmers don't like java (in which i totally agree with) and that WebUI currently doesn't support most of HTML browsers integrated with phones.</em></p>
<p>I have to agree also - Java is not an enjoyable language to develop with.Sure, .Net was practically plaigerised wholesale from Java, but frankly it's <em>difficult</em> to develop a Java application. The reason for this, I think,&nbsp;is that the Java sphere was from the outset far too <em>open</em>. There seems to be little control and forethought behind the multitude of versions of Java frameworks. It shouldn't be so tough just to get set up and start coding. Of course I appreciate that if Java had never existed .Net would have gone through the same stages of adolesence - there would be numerous versions of the .Net framework and it would be difficult to know which version to start developing with, and even more difficult to determine what the various platforms even offer over the others. But it's not. There are three versions of .Net (1.0 doesn't really exist as far as I'm concerned), and it's pretty easy to dig up information about how they differ and what platforms they'll work on.</p>
<p>In fact, I'll quote a friend of mind, who said:</p>
<p><em>&quot;Java lost.&quot;</em></p>
<p>I really like C#.</p>]]></blogpost>
  <blogpost id="86" key="NetMVCFrameworkReleaseImminent" guid="054012ca-5ed6-4bef-80e8-374425660d58" title=".Net MVC Framework Release Imminent" dateCreated="Tue, 04 Dec 2007 08:19:59" createdYear="2007" createdMonth="12" createdDay="4" createdHour="8" createdMinute="19" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Scott Guthrie has posted a <a href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx" target="_blank">comprehensive explanation of the URL routing system in the forthcoming MVC framework</a>. Looks like they've done some excellent work and I'm really looking forward to playing with it.</p>
<p>Scott also said in a comment that they're planning to release at the end of this week!</p>]]></blogpost>
  <blogpost id="85" key="TeamServerStandardLicensingChange" guid="63afe54f-6349-4ea7-b11a-a9bfbd7e2e44" title="Team Server Standard Licensing Change" dateCreated="Tue, 27 Nov 2007 08:15:28" createdYear="2007" createdMonth="11" createdDay="27" createdHour="8" createdMinute="15" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>With the recent change in Team System Standard Edition licensing, we'll find it much, much easier to adopt Team System 2008 in our agency and hence establish whether it's the right product for us to invest time and money into.&nbsp;</p>
<p>From <a href="http://blogs.msdn.com/bharry" target="_blank">Brian Harry's blog</a>:</p>
<address>The new licensing provisions are designed to make it easy if you want to allow lots of people in your company to use TFS to file bugs, feature requests, etc and have them available for your development team.&nbsp; Specifically they allow an unlimited number of users in your company to create any work item, query for work items they have created and view or update any work item they have created all without a CAL.&nbsp; This right comes with your Team Foundation Server Standard Edition server license and requires no additional purchase.</address>
<p>Brian also specifies that the licensing changes are intended to address the issue where the majority of users are not frequent users, whether they just post and check on bugs. Currently we're using the Gemini bug-tracking system, and have actually provided clients the ability to be able to post and track bugs. It's been extremely useful as a way of funneling information between us (the developers) and the clients. This ability would be really handy in Team System - it's still not legal however, even with the proposed license changes.</p>
<p>Nonetheless, very pleased with the change and I can't wait to roll out the new trial version!</p>
<p>Source: <a href="http://blogs.msdn.com/bharry/archive/2007/11/23/tfs-licensing-change-for-tfs-2008.aspx" target="_blank">blogs.msdn.com/bharry/archive/2007/11/23/tfs-licensing-change-for-tfs-2008.aspx</a></p>]]></blogpost>
  <blogpost id="84" key="MultipleSSLCertificatesonasinglewebserver" guid="feb08ce1-817d-4394-9aaf-c174e1be6b8d" title="Multiple SSL Certificates on a single web server" dateCreated="Wed, 21 Nov 2007 02:35:00" createdYear="2007" createdMonth="11" createdDay="21" createdHour="2" createdMinute="35" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Something I didn't know before today - SSL certificates in IIS require <em>unique IP addresses on the same server</em>. You can't, for instance, set up a development environment where two websites are hosted on a single web server using host headers and configure SSL on both. Each website requires a unique IP address.</p>
<p>Interestingly, <a href="http://www.ibm.com/developerworks/linux/library/wa-multissl.html" target="_blank">Apache can do this</a> using IP aliasing.</p>
<p>The thing that led me to find this out, though, is .Net related. I had configured SSL using the SelfSSL utility (part of the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=56FC92EE-A71A-4C73-B628-ADE629C89499&amp;displaylang=en" target="_blank">IIS 6.0 Resource Kit</a>) - which is probably why IIS didn't complain about the second SSL certificate. What I found happening in the website is:&nbsp; <em>the <strong>second </strong>website I configured with SSL was using web.config settings from the <strong>first </strong>website I configured when I opened the site in HTTPS</em>. Really strange behaviour. Begs the question - was the second website really displaying the first website in IIS? I couldn't find out because when I tried to repeat this, IIS would not allow the second website to run, which I suppose is the correct behaviour (IIS told me it couldn't start the website while another site was using the same port).</p>
<p>References:<br />
<a href="http://www.issociate.de/board/post/185695/Re:_Multiple_SSL_Sites_on_a_single_IIS_Server.html" target="_blank">http://www.issociate.de/board/post/185695/Re:_Multiple_SSL_Sites_on_a_single_IIS_Server.html</a></p>
<p>&nbsp;</p>]]></blogpost>
  <blogpost id="83" key="VS2008RTMandBeta2Uninstallation" guid="ad1808e2-ea42-4eff-8792-aa0c0b15db13" title="VS2008 RTM and Beta 2 Uninstallation" dateCreated="Wed, 21 Nov 2007 12:28:03" createdYear="2007" createdMonth="11" createdDay="21" createdHour="0" createdMinute="28" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>As everyone else on the planet already knows, <a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/11/19/visual-studio-2008-and-net-3-5-released.aspx">Visual Studio 2008</a> has been released. And many, including myself, will find the <a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/11/20/steps-to-uninstall-vs-2008-beta2-before-installing-the-vs-2008-final-release.aspx">VS2008 Beta 2 Uninstallation instructions</a> posted today very helpful.</p>
<p>I'm looking forward to installing the new release as well as setting up a new instance of Team System, as soon as my current workload dies down.</p>]]></blogpost>
  <blogpost id="82" key="NetMVCWalkthrough" guid="be721461-c6d8-409c-bffb-cd189cdd87e1" title=".Net MVC Walkthrough" dateCreated="Thu, 15 Nov 2007 12:35:58" createdYear="2007" createdMonth="11" createdDay="15" createdHour="0" createdMinute="35" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Scott Guthrie has posted a walkthrough of the forthcoming MVC framework for ASP.Net. Looks very cool!</p>
<p>http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx</p>]]></blogpost>
  <blogpost id="81" key="Priceless" guid="5b9319e7-3df5-4325-817a-6e98da4aa4f4" title="Priceless" dateCreated="Mon, 12 Nov 2007 09:49:00" createdYear="2007" createdMonth="11" createdDay="12" createdHour="9" createdMinute="49" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p><a target="_blank" href="http://www.snotr.com/video/597">I don't condone this sort of behaviour</a>.</p>]]></blogpost>
  <blogpost id="80" key="TS2005Unshelving" guid="6145941b-330e-45b3-89d8-4adf5559e354" title="TS2005 Unshelving" dateCreated="Tue, 06 Nov 2007 04:08:01" createdYear="2007" createdMonth="11" createdDay="6" createdHour="16" createdMinute="8" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>As we're beginning work on a new phase of development, I had some R&amp;D work I had been doing during the last couple of days last week which I don't want to be added to the build just yet. I figured the obvious thing to do would be to 'shelve' the changes. I didn't know anything more than that I wanted my changes to removed from the 'Pending Changes' window until such time as I want to reenter them into my workspace. And I want to make sure that the code files I've changed have bugfixes merged with them when I do 'unshelve' them.</p>
<p>Well I was suprised to learn that unshelving doesn't support merging. According to this MSDN article:</p>
<p><em>&quot;Unlike the Get operation, which merges reconcilable differences between two versions of a file automatically and helps you merge conflicts manually, the unshelve operation does not support merges. By removing shelved pending changes from your workspace at the commencement of the code review, you can be assured that any changes your reviewer makes to the shelveset, such as adding comments to a file, do not create merge conflicts during the unshelve process.&quot;</em></p>
<p>Meaning <em>all changes we make to files which have been shelved will be lost when we unshelve them</em>. I love the way it's being described as a <em>feature</em>.</p>
<p>If I've mis-understood the functionality I would really appreciate being corrected. (I know I don't have comments yet - send me an email).</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/ms181404(VS.80).aspx" target="_blank">http://msdn2.microsoft.com/en-us/library/ms181404(VS.80).aspx</a></p>]]></blogpost>
  <blogpost id="79" key="AlreadySeen" guid="5555374b-146c-49b5-b9ec-54a3f850adb3" title="Already Seen" dateCreated="Tue, 06 Nov 2007 04:06:20" createdYear="2007" createdMonth="11" createdDay="6" createdHour="16" createdMinute="6" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>The battle's over - the <a href="http://www.carbonfootyprint.com" target="_blank">EOn FA Cup campaign</a> website is live. Take a look, and if you find any bugs (I have no illusions) let me know - before my project manager does.</p>
<p>It was a 4am finish last night. The company was good enough to put us up in a hotel close to work to save us the trouble of commuting home and back to work again, which was convenient for me and a blessing to the others who were there and live a couple hours away by train. I'm absolutely knackered at this point.</p>
<p>I got in touch with NAnt config files today. With <a href="http://www.sleepoverrated.com" target="_blank">Scott</a>'s help I began setting up a build process which would deploy development, staging and live versions of the site, to avoid the annoying details of messing with config files. It's not a big deal for me but it'll make life a hell of a lot easier for anyone who comes along to maintain the site later on. Build files are a little weird, but I guess it's just the usual '<em>what the hell is going on here</em>' thing that comes with learning any new language ( 'what did you say....? code-<em>behind</em>? wtf?' ).</p>
<p>So now we've earned a rest, which means refactoring and optimisation, which means learning how to do it better... my favorite bit!</p>]]></blogpost>
  <blogpost id="78" key="ExcellentTeamSystemResource" guid="bff4937f-371f-4e82-aa6d-8e1ea68287ce" title="Excellent Team System Resource" dateCreated="Mon, 05 Nov 2007 10:28:57" createdYear="2007" createdMonth="11" createdDay="5" createdHour="10" createdMinute="28" secure="0" pageType="Standard" masterPage="/xsl/templates/default.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>This looks like a <a href="http://blogs.msdn.com/jeffbe/archive/2007/11/02/team-system-guidance-published-to-msdn.aspx" target="_blank">brilliant resource for Team System adopters</a>. I've yet to read through it but just from reading the contents page I can see there's loads of useful information.</p>]]></blogpost>
  <blogpost id="77" key="EOn" guid="d8dce659-6421-437f-bb4d-afdb79b5877b" title="EOn" dateCreated="Thu, 01 Nov 2007 01:13:28" createdYear="2007" createdMonth="11" createdDay="1" createdHour="1" createdMinute="13" secure="0" pageType="Standard" masterPage="/xsl/templates/andrewmyhre/blog.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Nearing the end of of a very difficult project, The EOn 'Carbon Neutral' FA Cup. Difficult because of the time-frame, and late nights, the weekends at the office. And what was all of this for? <a href="http://www.carbonfootyprint.com" target="_blank">Something that &quot;looks like the kind of website you go to to pay your bills&quot;</a>. I tend to agree, but then I'm not a designer, as anyone can tell by looking at this website.<br />
<br />
What I will say about the project is that I've learned a huge amount in the time I've been working on it. We set up a prototype Team System 2005 server shortly before commencing development, which was a very interesting experience. Something about having work items right there in my IDE makes me really excited. TS 2008 looks even cooler but until the whole suite is out of beta it's also out of the question at work.<br />
<br />
We also took on a contractor by the name of <a href="http://www.sleepoverrated.com" target="_blank">Scott Cowan</a>, a highly engaged developer from Canada. He has introduced us to unit testing and continuous integration, using MBUnit, NAnt, CruiseControl.Net and NCover. It's all new and extremely interesting, and our managers seem to be just as excited about the visibility it provides them of the status of a project.<br />
<br />
We have only scratched the surface with these technologies, because in general we've been in such a flap just trying to get the campaign website built that we haven't had any time for R&amp;D, so I'm looking forward to being able to step back and immerse myself in something new. I think I'll start with NAnt, and figure out what I can do with those build scripts. Can I pull config settings from various templates and produce multiple builds for our various deployment scenarios? And I also haven't figured out a simple thing like having it copy a build across the network to our dev server.<br />
<br />
It has been a difficult, but interesting month. I think I'll sleep for a week when it's over, and dream of unit testing.</p>]]></blogpost>
  <blogpost id="75" key="FirstPost" guid="bd56ea98-dcb0-4781-b4de-73bf2dca6365" title="First Post" dateCreated="Sun, 28 Oct 2007 08:12:08" createdYear="2007" createdMonth="10" createdDay="28" createdHour="8" createdMinute="12" secure="0" pageType="Standard" masterPage="/xsl/templates/default.xsl" homepage="0" blogpost="1" publishDate="Sun, 16 Nov 2008 11:43:34"><![CDATA[<p>Hi all...! This is where I plan to start documenting my learning of .Net, Java, Team System and other technologies. You can also expect me to write about Unit Testing, NAnt, Continuous Integration - all the current buzzwords. Not to mention public transport. It's daunting to start something like this, because I always draw a blank when I see a blank page. It'll be interesting to see what I can think of... or perhaps it won't!</p>]]></blogpost>
  <navigation id="173" guid="aa9fd3f2-f753-47ad-be9e-9f69c5c500ed" targetType="WebPage" targetID="64" navigateURL="HomePage.t">Blog</navigation>
  <navigation id="174" guid="af9c6ad7-865a-49d5-8881-b763a1efce18" targetType="WebPage" targetID="0">About Me</navigation>
  <inventory>
    <category id="554" guid="00000000-0000-0000-0000-000000000000" title="test" key="test" PhotoURL="/CustomAssets/andrewmyhre/image/FGSD23874SJHF.jpg">
      <product id="8863" title="asdf" key="asdf" guid="00000000-0000-0000-0000-000000000000" UPC="" Price="0" Discount="0" PhotoURL="/CustomAssets/andrewmyhre/image/face.jpg" />
    </category>
    <category id="555" guid="00000000-0000-0000-0000-000000000000" title="default" key="default" PhotoURL="/CustomAssets/andrewmyhre/image" />
  </inventory>
</website>